package com.qf.p1.util;


import com.alibaba.fastjson.JSONObject;
import com.qf.p1.model.User;
import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;

import java.util.Date;

/**
 * @author xuzhong
 * 处理jwt的签名与认证
 */
public class JwtUtil {
    /**
     * token 签发的有效期
     */
    public static final int TOKEN_EXPIRE=1000*60*30;
    /**
     * token加密算法的盐
     */
    public static final String TOKEN_KEY="qianfeng";
    /**
     * 生成一个token
     */
    public static String generatorToken(User user){
        //产生token
        String token= Jwts.builder()
                .setSubject(user.getUsername())
                .setIssuedAt(new Date())
                .setExpiration(new Date(System.currentTimeMillis()+TOKEN_EXPIRE))
                .claim("user", JSONObject.toJSONString(user))
                .signWith(SignatureAlgorithm.HS256,TOKEN_KEY.getBytes())
                .compact();
        return token;
    }

    /**
     * 解析token的方法
     */
    public static User checkToken(String token){
        Claims body=null;
        try{
            body= Jwts.parser().setSigningKey(TOKEN_KEY.getBytes())
                    .parseClaimsJws(token).getBody();
        }catch (Exception e){
            return null;
        }
        Object userJSONString=body.get("user");
        User user= JSONObject.parseObject((String)userJSONString,User.class);
        return user;
    }
}
